🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / model / src / commonMain / kotlin / org / meshtastic / core / model / ChannelOption.kt
Displaying Raw • Download
core/model/src/commonMain/kotlin/org/meshtastic/core/model/ChannelOption.kt 01cd54907d62cd90913d3d071b6bc240cae365ef (01cd5490) Text, 14.02 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72package T7ee787org.meshtastic.core.model
Tff7b72import T7ee787org.meshtastic.proto.Config.LoRaConfig
Tff7b72import T7ee787org.meshtastic.proto.Config.LoRaConfig.ModemPreset
Tff7b72import T7ee787org.meshtastic.proto.Config.LoRaConfig.RegionCode
Tff7b72import T7ee787kotlin.math.floor
T8b949e/** hash a string into an integer using the djb2 algorithm by Dan Bernstein http://www.cse.yorku.ca/~oz/hash.html */
Tff7b72private Tff7b72fun Td2a8ffhashTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3UInt Tb4b4b4{ T8b949e// using UInt instead of Long to match RadioInterface.cpp results
Tff7b72var Te6edf3hash Tff7b72= T79c0ff5T79c0ff3T79c0ff8T79c0ff1Te6edf3u
Tff7b72for Tb4b4b4(Te6edf3c Tff7b72in Te6edf3nameTb4b4b4) Tb4b4b4{
Te6edf3hash Tff7b72+Tff7b72= Tb4b4b4(Te6edf3hash Te6edf3shl T79c0ff5Tb4b4b4) Tff7b72+ Te6edf3cTb4b4b4.Te6edf3codeTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3hash
Tb4b4b4}
Tff7b72private Tff7b72val Te6edf3ModemPresetTb4b4b4.Te6edf3bandwidthTb4b4b4: Tffa657Float
Tff7b72getTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Te6edf3option Tff7b72in Te6edf3ChannelOptionTb4b4b4.Te6edf3entriesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3optionTb4b4b4.Te6edf3modemPreset Tff7b72=Tff7b72= Tff7b72thisTb4b4b4) Tff7b72return Te6edf3optionTb4b4b4.Te6edf3bandwidth
Tb4b4b4}
Tff7b72return T79c0ff0f
Tb4b4b4}
T8b949e/**
* The SNR (in dB) at or above which a packet sent with this modem preset can still be demodulated — i.e. the
* spreading-factor-determined demodulation floor. Signal quality should be judged relative to this limit, since the
* same SNR means very different things per preset: -15 dB is excellent on LongSlow (SF12) yet unusable on ShortFast
* (SF7).
*
* Values follow the Semtech SF -> SNR floor (SF7 -7.5 dB, stepping -2.5 dB per spreading factor up to SF12 -20 dB).
* Unknown/unset presets fall back to [ChannelOption.DEFAULT] (LongFast).
*/
Tff7b72val Te6edf3ModemPresetTff7b72?.Te6edf3snrLimitTb4b4b4: Tffa657Float
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3ChannelOptionTb4b4b4.Te6edf3fromTb4b4b4(Tff7b72thisTb4b4b4) Tff7b72?: Te6edf3ChannelOptionTb4b4b4.Te6edf3DEFAULTTb4b4b4)Tb4b4b4.Te6edf3snrLimit
Tff7b72private Tff7b72fun Te6edf3LoRaConfigTb4b4b4.Td2a8ffbandwidthTb4b4b4(Te6edf3regionInfoTb4b4b4: Te6edf3RegionInfo?Tb4b4b4) Tff7b72= Tff7b72if Tb4b4b4(Te6edf3use_presetTb4b4b4) Tb4b4b4{
Te6edf3modem_presetTb4b4b4.Te6edf3bandwidth Tff7b72* Tff7b72if Tb4b4b4(Te6edf3regionInfoTff7b72?.Te6edf3wideLora Tff7b72=Tff7b72= Tff7b72trueTb4b4b4) T79c0ff3.25f Tff7b72else T79c0ff1f
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3bandwidthTb4b4b4) Tb4b4b4{
T79c0ff3T79c0ff1 Tff7b72-Tff7b72> Tb4b4b4.T79c0ff0T79c0ff3T79c0ff1T79c0ff2T79c0ff5f
T79c0ff6T79c0ff2 Tff7b72-Tff7b72> Tb4b4b4.T79c0ff0T79c0ff6T79c0ff2T79c0ff5f
T79c0ff2T79c0ff0T79c0ff0 Tff7b72-Tff7b72> Tb4b4b4.T79c0ff2T79c0ff0T79c0ff3T79c0ff1T79c0ff2T79c0ff5f
T79c0ff4T79c0ff0T79c0ff0 Tff7b72-Tff7b72> Tb4b4b4.T79c0ff4T79c0ff0T79c0ff6T79c0ff2T79c0ff5f
T79c0ff8T79c0ff0T79c0ff0 Tff7b72-Tff7b72> Tb4b4b4.T79c0ff8T79c0ff1T79c0ff2T79c0ff5f
T79c0ff1T79c0ff6T79c0ff0T79c0ff0 Tff7b72-Tff7b72> T79c0ff1.6250f
Tff7b72else Tff7b72-Tff7b72> Te6edf3bandwidth Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0f
Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3LoRaConfigTb4b4b4.Te6edf3numChannelsTb4b4b4: Tffa657Int
Tff7b72getTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3regionInfo Tff7b72= Te6edf3RegionInfoTb4b4b4.Te6edf3fromRegionCodeTb4b4b4(Te6edf3regionTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3regionInfo Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tff7b72return T79c0ff0
Tff7b72val Te6edf3bw Tff7b72= Te6edf3bandwidthTb4b4b4(Te6edf3regionInfoTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3bw Tff7b72<Tff7b72= T79c0ff0fTb4b4b4) Tff7b72return T79c0ff1 T8b949e// Return 1 if bandwidth is zero or negative
Tff7b72val Te6edf3num Tff7b72= Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3regionInfoTb4b4b4.Te6edf3freqEnd Tff7b72- Te6edf3regionInfoTb4b4b4.Te6edf3freqStartTb4b4b4) Tff7b72/ Te6edf3bwTb4b4b4)
T8b949e// If the regional frequency range is smaller than the bandwidth, the firmware would
T8b949e// fall back to a default preset. In the app, we return 1 to avoid a crash.
Tff7b72return Tff7b72if Tb4b4b4(Te6edf3num Tff7b72> T79c0ff0Tb4b4b4) Te6edf3numTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) Tff7b72else T79c0ff1
Tb4b4b4}
Tff7b72internal Tff7b72fun Te6edf3LoRaConfigTb4b4b4.Td2a8ffchannelNumTb4b4b4(Te6edf3primaryNameTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657Int Tff7b72= Tff7b72when Tb4b4b4{
Te6edf3channel_num Tff7b72!Tff7b72= T79c0ff0 Tff7b72-Tff7b72> Te6edf3channel_num
Te6edf3numChannels Tff7b72=Tff7b72= T79c0ff0 Tff7b72-Tff7b72> T79c0ff0
Tff7b72else Tff7b72-Tff7b72> Tb4b4b4(Te6edf3hashTb4b4b4(Te6edf3primaryNameTb4b4b4) Tff7b72% Te6edf3numChannelsTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff1
Tb4b4b4}
Tff7b72internal Tff7b72fun Te6edf3LoRaConfigTb4b4b4.Td2a8ffradioFreqTb4b4b4(Te6edf3channelNumTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657Float Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3override_frequency Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tff7b72return Te6edf3override_frequency Tff7b72+ Te6edf3frequency_offset
Tff7b72val Te6edf3regionInfo Tff7b72= Te6edf3RegionInfoTb4b4b4.Te6edf3fromRegionCodeTb4b4b4(Te6edf3regionTb4b4b4)
Tff7b72return Tff7b72if Tb4b4b4(Te6edf3regionInfo Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tb4b4b4(Te6edf3regionInfoTb4b4b4.Te6edf3freqStart Tff7b72+ Te6edf3bandwidthTb4b4b4(Te6edf3regionInfoTb4b4b4) Tff7b72/ T79c0ff2Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3channelNum Tff7b72- T79c0ff1Tb4b4b4) Tff7b72* Te6edf3bandwidthTb4b4b4(Te6edf3regionInfoTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
T79c0ff0f
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Regulatory regions for radio usage
*
* @property regionCode The region code
* @property description A human readable description of the region
* @property freqStart The starting frequency in MHz
* @property freqEnd The ending frequency in MHz
* @property wideLora Whether the region uses wide Lora
* @see
* [LoRaWAN Regional Parameters](https://lora-alliance.org/wp-content/uploads/2020/11/lorawan_regional_parameters_v1.0.3reva_0.pdf)
*/
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72enum Tff7b72class T56d364RegionInfoTb4b4b4(
Tff7b72val Te6edf3regionCodeTb4b4b4: Te6edf3RegionCodeTb4b4b4,
Tff7b72val Te6edf3descriptionTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3freqStartTb4b4b4: Tffa657FloatTb4b4b4,
Tff7b72val Te6edf3freqEndTb4b4b4: Tffa657FloatTb4b4b4,
Tff7b72val Te6edf3wideLoraTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e/**
* United States
*
* @see [Springer Link](https://link.springer.com/content/pdf/bbm%3A978-1-4842-4357-2%2F1.pdf)
* @see [The Things Network](https://www.thethingsnetwork.org/docs/lorawan/regional-parameters/)
*/
Te6edf3USTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3USTb4b4b4, Ta5d6ff"Ta5d6ffUnited StatesTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff0T79c0ff2.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff8.0fTb4b4b4)Tb4b4b4,
T8b949e/** European Union 433MHz */
Te6edf3EU_433Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3EU_433Tb4b4b4, Ta5d6ff"Ta5d6ffEuropean Union 433MHzTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff3T79c0ff3.0fTb4b4b4, T79c0ff4T79c0ff3T79c0ff4.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* European Union 868MHz
*
* Special Note: The link above describes LoRaWAN's band plan, stating a power limit of 16 dBm. This is their own
* suggested specification, we do not need to follow it. The European Union regulations clearly state that the power
* limit for this frequency range is 500 mW, or 27 dBm. It also states that we can use interference avoidance and
* spectrum access techniques (such as LBT + AFA) to avoid a duty cycle. (Please refer to line P page 22 of this
* document.)
*
* @see
* [ETSI EN 300 220-2 V3.1.1](https://www.etsi.org/deliver/etsi_en/300200_300299/30022002/03.01.01_60/en_30022002v030101p.pdf)
*/
Te6edf3EU_868Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3EU_868Tb4b4b4, Ta5d6ff"Ta5d6ffEuropean Union 868MHzTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff9.4fTb4b4b4, T79c0ff8T79c0ff6T79c0ff9.65fTb4b4b4)Tb4b4b4,
T8b949e/** China */
Te6edf3CNTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3CNTb4b4b4, Ta5d6ff"Ta5d6ffChinaTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff7T79c0ff0.0fTb4b4b4, T79c0ff5T79c0ff1T79c0ff0.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Japan
*
* @see [ARIB STD-T108](https://www.arib.or.jp/english/html/overview/doc/5-STD-T108v1_5-E1.pdf)
* @see [Qiita](https://qiita.com/ammo0613/items/d952154f1195b64dc29f)
*/
Te6edf3JPTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3JPTb4b4b4, Ta5d6ff"Ta5d6ffJapanTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff2T79c0ff0.5fTb4b4b4, T79c0ff9T79c0ff2T79c0ff3.5fTb4b4b4)Tb4b4b4,
T8b949e/**
* Australia / New Zealand
*
* @see [IoT Spectrum Fact Sheet](https://www.iot.org.au/wp/wp-content/uploads/2016/12/IoTSpectrumFactSheet.pdf)
* @see
* [IoT Spectrum in NZ Briefing Paper](https://iotalliance.org.nz/wp-content/uploads/sites/4/2019/05/IoT-Spectrum-in-NZ-Briefing-Paper.pdf)
*/
Te6edf3ANZTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3ANZTb4b4b4, Ta5d6ff"Ta5d6ffAustralia / Brazil / New ZealandTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff1T79c0ff5.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff8.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Korea
*
* @see [Law.go.kr](https://www.law.go.kr/LSW/admRulLsInfoP.do?admRulId=53943&efYd=0)
* @see
* [LoRaWAN Regional Parameters](https://resources.lora-alliance.org/technical-specifications/rp002-1-0-4-regional-parameters)
*/
Te6edf3KRTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3KRTb4b4b4, Ta5d6ff"Ta5d6ffKoreaTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff2T79c0ff0.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff3.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Taiwan, 920-925Mhz, limited to 0.5W indoor or coastal, 1.0W outdoor. 5.8.1 in the Low-power Radio-frequency
* Devices Technical Regulations
*
* @see [NCC Taiwan](https://www.ncc.gov.tw/english/files/23070/102_5190_230703_1_doc_C.PDF)
* @see [National Gazette](https://gazette.nat.gov.tw/egFront/e_detail.do?metaid=147283)
*/
Te6edf3TWTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3TWTb4b4b4, Ta5d6ff"Ta5d6ffTaiwanTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff2T79c0ff0.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff5.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Russia Note:
* - We do LBT, so 100% is allowed.
*
* @see [Digital.gov.ru](https://digital.gov.ru/uploaded/files/prilozhenie-12-k-reshenyu-gkrch-18-46-03-1.pdf)
*/
Te6edf3RUTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3RUTb4b4b4, Ta5d6ff"Ta5d6ffRussiaTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff8.7fTb4b4b4, T79c0ff8T79c0ff6T79c0ff9.2fTb4b4b4)Tb4b4b4,
T8b949e/** India */
Te6edf3INTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3INTb4b4b4, Ta5d6ff"Ta5d6ffIndiaTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff5.0fTb4b4b4, T79c0ff8T79c0ff6T79c0ff7.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* New Zealand 865MHz
*
* @see [RSM NZ](https://rrf.rsm.govt.nz/smart-web/smart/page/-smart/domain/licence/LicenceSummary.wdk?id=219752)
* @see
* [IoT Spectrum in NZ Briefing Paper](https://iotalliance.org.nz/wp-content/uploads/sites/4/2019/05/IoT-Spectrum-in-NZ-Briefing-Paper.pdf)
*/
Te6edf3NZ_865Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3NZ_865Tb4b4b4, Ta5d6ff"Ta5d6ffNew Zealand 865MHzTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff4.0fTb4b4b4, T79c0ff8T79c0ff6T79c0ff8.0fTb4b4b4)Tb4b4b4,
T8b949e/** Thailand */
Te6edf3THTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3THTb4b4b4, Ta5d6ff"Ta5d6ffThailandTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff2T79c0ff0.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff5.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Ukraine 433MHz 433,05-434,7 Mhz 10 mW
*
* @see [NKZRZI](https://nkrzi.gov.ua/images/upload/256/5810/PDF_UUZ_19_01_2016.pdf)
*/
Te6edf3UA_433Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3UA_433Tb4b4b4, Ta5d6ff"Ta5d6ffUkraine 433MHzTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff3T79c0ff3.0fTb4b4b4, T79c0ff4T79c0ff3T79c0ff4.7fTb4b4b4)Tb4b4b4,
T8b949e/**
* Malaysia 433MHz 433 - 435 MHz at 100mW, no restrictions.
*
* @see [MCMC](https://www.mcmc.gov.my/skmmgovmy/media/General/pdf/Short-Range-Devices-Specification.pdf)
*/
Te6edf3MY_433Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3MY_433Tb4b4b4, Ta5d6ff"Ta5d6ffMalaysia 433MHzTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff3T79c0ff3.0fTb4b4b4, T79c0ff4T79c0ff3T79c0ff5.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Malaysia 919MHz 919 - 923 Mhz at 500mW, no restrictions. 923 - 924 MHz at 500mW with 1% duty cycle OR frequency
* hopping. Frequency hopping is used for 919 - 923 MHz.
*
* @see [MCMC](https://www.mcmc.gov.my/skmmgovmy/media/General/pdf/Short-Range-Devices-Specification.pdf)
*/
Te6edf3MY_919Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3MY_919Tb4b4b4, Ta5d6ff"Ta5d6ffMalaysia 919MHzTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff1T79c0ff9.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff4.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Singapore 923MHz SG_923 Band 30d: 917 - 925 MHz at 100mW, no restrictions.
*
* @see
* [IMDA](https://www.imda.gov.sg/-/media/imda/files/regulation-licensing-and-consultations/ict-standards/telecommunication-standards/radio-comms/imdatssrd.pdf)
*/
Te6edf3SG_923Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3SG_923Tb4b4b4, Ta5d6ff"Ta5d6ffSingapore 923MHzTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff1T79c0ff7.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff5.0fTb4b4b4)Tb4b4b4,
T8b949e/**
* Philippines 433MHz 433 - 434.7 MHz <10 mW erp, NTC approved device required
*
* @see [Firmware Issue #4948](https://github.com/meshtastic/firmware/issues/4948#issuecomment-2394926135)
*/
Te6edf3PH_433Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3PH_433Tb4b4b4, Ta5d6ff"Ta5d6ffPhilippines 433MHzTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff3T79c0ff3.0fTb4b4b4, T79c0ff4T79c0ff3T79c0ff4.7fTb4b4b4)Tb4b4b4,
T8b949e/**
* Philippines 868MHz 868 - 869.4 MHz <25 mW erp, NTC approved device required
*
* @see [Firmware Issue #4948](https://github.com/meshtastic/firmware/issues/4948#issuecomment-2394926135)
*/
Te6edf3PH_868Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3PH_868Tb4b4b4, Ta5d6ff"Ta5d6ffPhilippines 868MHzTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff8.0fTb4b4b4, T79c0ff8T79c0ff6T79c0ff9.4fTb4b4b4)Tb4b4b4,
T8b949e/**
* Philippines 915MHz 915 - 918 MHz <250 mW EIRP, no external antenna allowed
*
* @see [Firmware Issue #4948](https://github.com/meshtastic/firmware/issues/4948#issuecomment-2394926135)
*/
Te6edf3PH_915Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3PH_915Tb4b4b4, Ta5d6ff"Ta5d6ffPhilippines 915MHzTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff1T79c0ff5.0fTb4b4b4, T79c0ff9T79c0ff1T79c0ff8.0fTb4b4b4)Tb4b4b4,
T8b949e/** 2.4 GHZ WLAN Band equivalent. Only for SX128x chips. */
Te6edf3LORA_24Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3LORA_24Tb4b4b4, Ta5d6ff"Ta5d6ff2.4 GHzTa5d6ff"Tb4b4b4, T79c0ff2T79c0ff4T79c0ff0T79c0ff0.0fTb4b4b4, T79c0ff2T79c0ff4T79c0ff8T79c0ff3.5fTb4b4b4, Te6edf3wideLora Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4,
T8b949e/**
* Australia / New Zealand 433MHz 433.05 - 434.79 MHz, 25mW EIRP max, No duty cycle restrictions
*
* @see [ACMA](https://www.acma.gov.au/licences/low-interference-potential-devices-lipd-class-licence)
* @see [NZ Gazette](https://gazette.govt.nz/notice/id/2022-go3100)
*/
Te6edf3ANZ_433Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3ANZ_433Tb4b4b4, Ta5d6ff"Ta5d6ffAustralia / New Zealand 433MHzTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff3T79c0ff3.05fTb4b4b4, T79c0ff4T79c0ff3T79c0ff4.79fTb4b4b4)Tb4b4b4,
T8b949e/**
* Kazakhstan 433MHz 433.075 - 434.775 MHz <10 mW EIRP, Low Powered Devices (LPD)
*
* @see [Firmware Issue #7204](https://github.com/meshtastic/firmware/issues/7204)
*/
Te6edf3KZ_433Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3KZ_433Tb4b4b4, Ta5d6ff"Ta5d6ffKazakhstan 433MHzTa5d6ff"Tb4b4b4, T79c0ff4T79c0ff3T79c0ff3.075fTb4b4b4, T79c0ff4T79c0ff3T79c0ff4.775fTb4b4b4)Tb4b4b4,
T8b949e/**
* Kazakhstan 863MHz 863 - 868 MHz <25 mW EIRP, 500kHz channels allowed, must not be used at airfields
*
* @see [Firmware Issue #7204](https://github.com/meshtastic/firmware/issues/7204)
*/
Te6edf3KZ_863Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3KZ_863Tb4b4b4, Ta5d6ff"Ta5d6ffKazakhstan 863MHzTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff3.0fTb4b4b4, T79c0ff8T79c0ff6T79c0ff8.0fTb4b4b4, Te6edf3wideLora Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4,
T8b949e/**
* Nepal 865Mhz 865 - 868 Mhz
*
* @see [Firmware Issue #7380](https://github.com/meshtastic/firmware/pull/7380)
*/
Te6edf3NP_865Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3NP_865Tb4b4b4, Ta5d6ff"Ta5d6ffNepal 865MHzTa5d6ff"Tb4b4b4, T79c0ff8T79c0ff6T79c0ff5.0fTb4b4b4, T79c0ff8T79c0ff6T79c0ff8.0fTb4b4b4, Te6edf3wideLora Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4,
T8b949e/**
* Brazil 902MHz 902 - 907.5 MHz
*
* @see [Firmware Issue #7399](https://github.com/meshtastic/firmware/pull/7399)
*/
Te6edf3BR_902Tb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3BR_902Tb4b4b4, Ta5d6ff"Ta5d6ffBrazil 902MHzTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff0T79c0ff2.0fTb4b4b4, T79c0ff9T79c0ff0T79c0ff7.5fTb4b4b4, Te6edf3wideLora Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4,
T8b949e/** This needs to be last. Same as US. */
Te6edf3UNSETTb4b4b4(Te6edf3RegionCodeTb4b4b4.Te6edf3UNSETTb4b4b4, Ta5d6ff"Ta5d6ffPlease set a regionTa5d6ff"Tb4b4b4, T79c0ff9T79c0ff0T79c0ff2.0fTb4b4b4, T79c0ff9T79c0ff2T79c0ff8.0fTb4b4b4)Tb4b4b4,
Tb4b4b4;
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72fun Td2a8fffromRegionCodeTb4b4b4(Te6edf3regionCodeTb4b4b4: Te6edf3RegionCodeTb4b4b4)Tb4b4b4: Te6edf3RegionInfo? Tff7b72= Te6edf3entriesTb4b4b4.Te6edf3find Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3regionCode Tff7b72=Tff7b72= Te6edf3regionCode Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72enum Tff7b72class T56d364ChannelOptionTb4b4b4(Tff7b72val Te6edf3modemPresetTb4b4b4: Te6edf3ModemPresetTb4b4b4, Tff7b72val Te6edf3bandwidthTb4b4b4: Tffa657FloatTb4b4b4, Tff7b72val Te6edf3snrLimitTb4b4b4: Tffa657FloatTb4b4b4) Tb4b4b4{
T8b949e// Grouped by range and speed for better readability.
T8b949e// snrLimit = demodulation floor for the preset's spreading factor (see [ModemPreset.snrLimit]).
Te6edf3VERY_LONG_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3VERY_LONG_SLOWTb4b4b4, T79c0ff0.0625fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff2T79c0ff0fTb4b4b4)Tb4b4b4, T8b949e// SF12
Te6edf3LONG_TURBOTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3LONG_TURBOTb4b4b4, T79c0ff0.500fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff2.5fTb4b4b4)Tb4b4b4, T8b949e// SF9
Te6edf3LONG_FASTTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3LONG_FASTTb4b4b4, T79c0ff0.250fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff7.5fTb4b4b4)Tb4b4b4, T8b949e// SF11
Te6edf3LONG_MODERATETb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3LONG_MODERATETb4b4b4, T79c0ff0.125fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff7.5fTb4b4b4)Tb4b4b4, T8b949e// SF11
T8b949e// SF12: physically -20 dB. NB: Meshtastic-Apple's snrLimit() returns -7.5 here, which is the SF7 value
T8b949e// and an apparent bug — see meshtastic/Meshtastic-Android#5446.
Te6edf3LONG_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3LONG_SLOWTb4b4b4, T79c0ff0.125fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff2T79c0ff0fTb4b4b4)Tb4b4b4, T8b949e// SF12
Te6edf3MEDIUM_FASTTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3MEDIUM_FASTTb4b4b4, T79c0ff0.250fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff2.5fTb4b4b4)Tb4b4b4, T8b949e// SF9
Te6edf3MEDIUM_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3MEDIUM_SLOWTb4b4b4, T79c0ff0.250fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff5fTb4b4b4)Tb4b4b4, T8b949e// SF10
Te6edf3MEDIUM_TURBOTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3MEDIUM_TURBOTb4b4b4, T79c0ff0.500fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff2.5fTb4b4b4)Tb4b4b4, T8b949e// SF9
Te6edf3SHORT_FASTTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3SHORT_FASTTb4b4b4, T79c0ff0.250fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff7.5fTb4b4b4)Tb4b4b4, T8b949e// SF7
Te6edf3SHORT_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3SHORT_SLOWTb4b4b4, T79c0ff0.250fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff0fTb4b4b4)Tb4b4b4, T8b949e// SF8
Te6edf3SHORT_TURBOTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3SHORT_TURBOTb4b4b4, T79c0ff0.500fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff7.5fTb4b4b4)Tb4b4b4, T8b949e// SF7
Te6edf3LITE_FASTTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3LITE_FASTTb4b4b4, T79c0ff0.125fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff2.5fTb4b4b4)Tb4b4b4,
Te6edf3LITE_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3LITE_SLOWTb4b4b4, T79c0ff0.125fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff5fTb4b4b4)Tb4b4b4,
Te6edf3NARROW_FASTTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3NARROW_FASTTb4b4b4, T79c0ff0.0625fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff0fTb4b4b4)Tb4b4b4,
Te6edf3NARROW_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3NARROW_SLOWTb4b4b4, T79c0ff0.0625fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff2.5fTb4b4b4)Tb4b4b4,
T8b949e// 15.625 kHz LoRa bandwidth (firmware modemPresetToParams; the proto's "20kHz" is the
T8b949e// padded channel spacing, not the modem bandwidth used for numChannels/radioFreq math).
Te6edf3TINY_FASTTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3TINY_FASTTb4b4b4, T79c0ff0.015625fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff7.5fTb4b4b4)Tb4b4b4, T8b949e// SF7
Te6edf3TINY_SLOWTb4b4b4(Te6edf3ModemPresetTb4b4b4.Te6edf3TINY_SLOWTb4b4b4, T79c0ff0.015625fTb4b4b4, Te6edf3snrLimit Tff7b72= Tff7b72-T79c0ff1T79c0ff0fTb4b4b4)Tb4b4b4, T8b949e// SF8
Tb4b4b4;
Tff7b72companion Tff7b72object Tb4b4b4{
T8b949e/** The default channel option for new configurations. */
Tff7b72val Te6edf3DEFAULT Tff7b72= Te6edf3LONG_FAST
T8b949e/** Finds the ChannelOption corresponding to the given ModemPreset. Returns null if no match is found. */
Tff7b72fun Td2a8fffromTb4b4b4(Te6edf3modemPresetTb4b4b4: Te6edf3ModemPreset?Tb4b4b4)Tb4b4b4: Te6edf3ChannelOption? Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3modemPreset Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tff7b72return Tff7b72null
T8b949e// The `entries` property is preferred over `values()` since Kotlin 1.9
Tff7b72return Te6edf3entriesTb4b4b4.Te6edf3find Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3modemPreset Tff7b72=Tff7b72= Te6edf3modemPreset Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.08s